#ifndef MCACHE_CMD_H__
#define MCACHE_CMD_H__

#define MAX_FD 1024
#define MAX_BUFFER_SIZE 2097152
#define MAX_TOKEN_NUM 10

#include<mcache.h>
#include<common.h>
#include<string.h>
using std::string;
/**
 * CmdParsing 命令解析
 * 当有新命令连接，调用socket_regist
 * 如果有新命令到达，调用socket_in
 *
 * 命令解析的结果是执行
 *
 */


enum am_stat
{
    WAIT_CMD,
    CMD_PARSE,
    WORKING,
    WAIT_MORE,
    CMD_OVER,
};

struct soc_stat{
    int socfd;
    char buffer[MAX_BUFFER_SIZE];
    int buffer_cur;
    int parse_cur;
    int parse_end;
    am_stat amstat;
};

enum err_case{
    ERR_CMD,
    ERR_CLIENT,
    ERR_SERVER,
};

struct cmd_token{
    char *val;
    int len;
};

void parse_error(soc_stat *socstat, err_case err_stat, const string& cs);

void parse_buffer_in(soc_stat stat);
//从socket输入缓冲区存入buffer
void parse_get_txt(void);
//从buffer中解析出一个 textline
void parse_get_ust(void);
//从buffer中解析出一个 unstructed

int parse_cmd_split(char *buffer, int beg, int end, char**);
//按照空格区分解析split 并且在后面都添加一个'\0'
#endif